package czy.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 操作redis键值对的控制器
 */
@RestController
@RequestMapping("/value")
public class ValueController {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    /**
     * 获取制定键的值
     */
    @GetMapping("/{key}")
    public Object getValue(@PathVariable String key){
        return this.redisTemplate.opsForValue().get(key);
    }

    /**
     * 新增或者更新键值对
     */
    @PostMapping("/{key}")
    public Map<String,Object> setValue(@PathVariable String key,@RequestBody Object Object){
        this.redisTemplate.opsForValue().set(key,Object);
        Map<String,Object> map = new HashMap<>();
        map.put(key,Object);
        return map;
    }

    /**
     * 一次设置多个键值对接口
     */
    @PostMapping("/multiset")
    public Map<String,Object> multiSet(@RequestBody Map<String,Object> Objects){
        this.redisTemplate.opsForValue().multiSet(Objects);
        return Objects;
    }

    /**
     * 删除制定键对应的值
     * RedisTemplate没有删除指定键的方法,只能设置为null
     * 这种方式删除不了key,只能将key的内容设置为空
     */
    @DeleteMapping("/{key}")
    public Object deleteValue(@PathVariable String key){
        Object Object = this.redisTemplate.opsForValue().getAndSet(key,null);
        return Object;
    }

}
